Librerías
library(dplyr)
library(data.table)
library(lubridate)
library(ggplot2)
Funciones
isValidEmail <- function(x) {
grepl("\\<[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}\\>", as.character(x), ignore.case=TRUE)
}
El objetivo de este script es el filtrado de los datos de origen de e-Preselec ESP para su carga en Cornerstone para el ámbito Holding.
En la subcarpeta datos_originales/ están todos los archivos fuente obtenidos de e-Preselec ESP
En la subcarpeta output/ dejaremos los ficheros de salida ya filtrados y limpiados
Leemos el fichero de maestro de candidatos y vamos a ir eliminando candidatos por diferentes criterios
Primero anonimizados, nombre en blanco, email en blanco, emails con formato inválido
nombre <- "datos_originales/01-Candidatos_Datos_Personales.csv"
fichero_candidatos <- read.csv2(nombre, sep = "~", quote = "", fileEncoding = "UTF-8", stringsAsFactors = TRUE)
candidatos_maestro <- tbl_df(fichero_candidatos)
candidatos_maestro <- filter(candidatos_maestro, NOMBRE != "XXXXXX")
candidatos_maestro <- filter(candidatos_maestro, NOMBRE != "")
candidatos_maestro <- filter(candidatos_maestro, EMAIL != "")
emails_incorectos <- filter(candidatos_maestro,!isValidEmail(EMAIL))
candidatos_maestro <- filter(candidatos_maestro, isValidEmail(EMAIL))
Estos son una muestra de los emails eliminados por tener un formato inválido
print(emails_incorectos$EMAIL)
[1] f@es marianiclos@gmailcom Madrid
[4] fatimaseri@hotmailcom jingzhang026@gmail vexredx.com
[7] desconocido@desconocido beagraciam@gmail. desconocido@desconocido
[10] isabeld84@hotmailcom ---@--- dddd@fff
[13] javier.villegas.bartolome@gmailcom ---@---.com cvxv@fgdsf
[16] aaa@aaa anaparragues@gmail xxxxx@xxxx
[19] victor@andradas veroalondas@gmailcom pabespmat@hotmailcom
[22] evamaria.naranjo@colmenero Jose.mtnez.montoto@gmail. flower464@hotmail
[25] oscarandres_garcia@hotmailcom ralen@458 miguesn@hotmaile.s
[28] ---@hotmail.es irenesantor@gmailcom juliosersan@gmailcom
[31] soniasubg@gmail francha69@gmail Rportillogmez@hotmail
[34] Sircris728@hotmail jose.meseguer2@gmail Mdmglopez@gmail
[37] mariazabsan@gmail gema_1708@Hotmail. com efg
[40] rociosanzrg@hotmail imbertguzman29@hotmail. com Temale2@hotmail
[43] aliciafrivas@gmail Mariajosegarci81@hotmail A
[46] pilherca@gmail imerzab@gmail Mariajesus-93@Hotmail. Com
[49] Jmpriego86@gmail leticialopher@gmail. com rocíomv1128@hotmail. com
[52] lourdesfolgueiraarias@Gmail. Com romero.david@ hotmail.es graciaouaglou@Gmail. com
[55] yosoymajo@hotmail. es colombia9777@hotmail. com mjiga@hotmail. com
[58] Orianahernandez85@gmail. Com ragonel2004@hotmail. com ee
[61] trigoantonio25@gmail. com Karito.km95@gmail. com Karito.km95@gmail. com
[64] criscalles@gmail. com ilham.sadiki@gmail. com Manuel_gp89@hotmail. Com
[67] Manuel_gp89@hotmail. Com Manuel_gp89@hotmail. Com Manuel_gp89@hotmail. Com
[70] taniacarvajalcruz @hotmail.com Jessicaandreuribelles@gmail Joanafranco03@gmail
[73] patriciamoralpezuela@gmail. com yo_rubiaa92 Barraganhernandez ruben@ gmail.com
[76] aaaa aaaa lauraochoalonso@gmail
[79] laura.herreroa@gmail adarga2001@ yahoo.es adrianajazminramirez2396
[82] adrianajazminramirez2396 adrianajazminramirez2396 adrianajazminramirez2396
[85] adrianajazminramirez2396 olgamcamps@yahoo. es pazcampuzano28@gmail
[88] Lauramunozlopezbermejo@Gmail. Com f.valentina.c@ gmail.com antoniolopezcabeza @hotmail.com
[91] kimeragodoyarencibia@hotmail. com warda_zin-warda@hotmail. com irispayares@hotmail
[94] klarix501@gmail danielferrer87@gmail carlosbotonvalderrabano@gmail
[97] yeco2963@hot corinnamarta.11@hotmailcom maru2_torres @hotmail.com
[100] nabilagimenoizquierdo@gmail sonia-pt@hotmail Paulinagroeger@Gmail. Com
[103] guadalupekey1905@hotmail Calamardo231107@gmail beaog_26952hotmail.com
[106] virmarroncero@gmail Niurmanmar@gmail. Com Maya-1727@Hotmail. Com
[109] Fua_12@hotmail. Com afernandezdealbaalonso rebecapelaezsuarez@gmail. com
242258 Levels: larazubimendi@gmail.com teresa_vergara_alvarez@hotmail.com amarantavg@yahoo.es ... zzzdelrosal@gmail.com
Tampoco vamos a cargar los candidatos que ya están incorporados como empleados
candidatos_maestro <- filter(candidatos_maestro, ESTADO != "Incorporado")
También vamos a eliminar los candidatos probablemente de prueba que tienen “infojobs” o “infoempleo” en su correo electrónico
candidatos_maestro <- filter(candidatos_maestro, !(EMAIL %like% "@infojobs"))
candidatos_maestro <- filter(candidatos_maestro, !(EMAIL %like% "@infoempleo"))
candidatos_maestro <- filter(candidatos_maestro, !(EMAIL %like% "@vacio.com"))
De los candidatos duplicados cargaremos únicamente una ocurrencia, la de fecha de actualización más reciente. Estos son alugunos de los repetidos
emails_repetidos <- candidatos_maestro %>% group_by(EMAIL) %>%
summarise(count = n()) %>%
arrange(desc(count)) %>% filter(count > 1)
print(emails_repetidos)
Eliminamos pues los candidatos duplicados, dejando únicamente uno por email, el de fecha de actualización más reciente
candidatos_maestro <- candidatos_maestro %>%
arrange(desc(dmy_hms(FECHA_ACTUALIZACION)), desc(ID_CANDIDATO)) %>%
distinct(EMAIL,.keep_all = TRUE) %>%
arrange(ID_CANDIDATO)
Comprobamos si quedan duplicados
emails_repetidos <- candidatos_maestro %>% group_by(EMAIL) %>%
summarise(count = n()) %>%
arrange(desc(count)) %>% filter(count > 1)
print(emails_repetidos)
A ver cuántos candidatos nos quedan (por fecha de actualización):
fechas <- select(candidatos_maestro,ID_CANDIDATO,FECHA_ACTUALIZACION)
fechas$FECHA_ACTUALIZACION <- as.POSIXct(date(dmy_hms(fechas$FECHA_ACTUALIZACION)))
ggplot(fechas, aes(FECHA_ACTUALIZACION)) +
geom_histogram(aes(fill=..count..)) +
labs(title="Histograma de Candidatos Actualizados (mensual)") +
labs(x="Fecha", y="Número de Actualizaciones") +
scale_x_datetime(breaks = date_breaks("18 months"),
labels = date_format("%Y-%b")
)
Y por fecha de alta
fechas <- select(candidatos_maestro,ID_CANDIDATO,FECHA_ALTA)
fechas$FECHA_ALTA <- as.POSIXct(date(dmy_hms(fechas$FECHA_ALTA)))
ggplot(fechas, aes(FECHA_ALTA)) +
geom_histogram(aes(fill=..count..)) +
labs(title="Histograma de Candidatos dados de alta (mensual)") +
labs(x="Fecha", y="Número de Actualizaciones") +
scale_x_datetime(breaks = date_breaks("18 months"),
labels = date_format("%Y-%b")
)
Vamos a ver mejor los últimos dos años, desde Junio del 2015
fechas <- select(candidatos_maestro,ID_CANDIDATO,FECHA_ACTUALIZACION)
fechas$FECHA_ACTUALIZACION <- as.POSIXct(date(dmy_hms(fechas$FECHA_ACTUALIZACION)))
ggplot(fechas, aes(FECHA_ACTUALIZACION)) +
geom_histogram(aes(fill=..count..)) +
labs(title="Histograma de Candidatos Actualizados (mensual)") +
labs(x="Fecha", y="Número de Actualizaciones") +
scale_x_datetime(breaks = date_breaks("2 months"),
labels = date_format("%Y-%b"),
limits = c(as.POSIXct("2015-06-01"),
as.POSIXct("2017-06-01"))
)
fechas <- select(candidatos_maestro,ID_CANDIDATO,FECHA_ALTA)
fechas$FECHA_ALTA <- as.POSIXct(date(dmy_hms(fechas$FECHA_ALTA)))
ggplot(fechas, aes(FECHA_ALTA)) +
geom_histogram(aes(fill=..count..)) +
labs(title="Histograma de Candidatos dados de alta (mensual)") +
labs(x="Fecha", y="Número de Actualizaciones") +
scale_x_datetime(breaks = date_breaks("2 months"),
labels = date_format("%Y-%b"),
limits = c(as.POSIXct("2015-06-01"),
as.POSIXct("2017-06-01"))
)